<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script type="text/javascript">
		Number.prototype.toFixed2 = function (decimal) {
		  // console.log(this, decimal)
		  if (Number(decimal) < 0 && Number(decimal) > 100) {
		    return RangeError('toFixed() digits argument must be between 0 and 100');
		  }
		  // 按小数点分割，得到整数位及小数位
		  // 按保留小数点位数分割小数位，得到需保留的小数位
		  // 将需保留的小数位与整数位拼接得到四舍五入之前的结果
		  // 对需四舍五入的小数最大一位数进行四舍五入，如果大于等于5则进位flag为1，否则为0
		  // 对四舍五入之前的结果+进位flag进行四舍五入得到最终结果

		  // 分割整数与小数
		  let cutArr = this.toString().split('.');
		  // 小数部分根据要保留的小数确定，如果小数部分长度小于要保留的精度缺失部分用0补全
		  let decimalStr = cutArr[1].length > decimal ? cutArr[1] : cutArr[1] + new Array(decimal - cutArr[1].length).fill('0');
		  // 是否进位
		  const plus = decimalStr.slice(decimal, (decimal+1)) >= 5 ? 1 : 0;
		  // 未四舍五入之前，(处理保留0位小数)
		  let mainArr = (cutArr[0] + (decimal > 0 ? ('.' + decimalStr.slice(0, decimal)) : ('' + decimalStr.slice(0, decimal)))).split('');
		  // 要输出的结果最后一位+是否要进位，
		  mainArr[mainArr.length - 1] = Number(mainArr[mainArr.length - 1]) + plus;
		  mainArr.reverse();
		  // 如果加完是10则向前进一位,否则直接输出
		  if (plus && mainArr[0] > 9) {
		    for (let i = 0; i < mainArr.length; i++) {
		      if (mainArr[i] > 9) {
		        if (mainArr[i + 1] != undefined && mainArr[i + 2] != undefined) {
		          if (mainArr[i + 1] === '.') {
		            mainArr[i + 2] = Number(mainArr[i + 2]) + 1;
		          } else {
		            mainArr[i + 1] = Number(mainArr[i + 1]) + 1;
		          }
		        }
		        mainArr[i] = 0
		      }
		    }
		  }
		  return mainArr.reverse().join().replace(/,/g, '')
		}
		// 测试
		// 
		console.log('四舍六入五成双测试')
		console.group();
		console.log('(9.8350).toFixed(2)',(9.8350).toFixed(2),'(9.8350).toFixed(2)',(9.8350).toFixed2(2));
		console.log('(1.335).toFixed(2)',(1.335).toFixed(2),'(1.335).toFixed(2)',(1.335).toFixed2(2));
		console.log('(9.8250).toFixed(2)',(9.8250).toFixed(2),'(9.8250).toFixed(2)',(9.8250).toFixed2(2));
		console.groupEnd();
		console.log("四舍六入五成双测试");
		console.log('数值计算测试')
		console.group();
		console.log('(0.1+0.2).toFixed(10)',(0.1+0.2).toFixed(10),'(0.1+0.2).toFixed(10)',(0.1+0.2).toFixed2(10));
		console.log('(0.1+0.2).toFixed(2)',(0.1+0.2).toFixed(2),'(0.1+0.2).toFixed(2)',(0.1+0.2).toFixed2(2));
		console.log('(2.0115 * 1000).toFixed(0)',(2.0115 * 1000).toFixed(0),'(2.0115 * 1000).toFixed(0)',(2.0115 * 1000).toFixed2(0));
		console.groupEnd();
		console.log("数值计算测试");
		console.log('数值计算测试')
		console.group();
		console.log('(9.805).toFixed2(2)',(9.805).toFixed2(2));
		console.log('(9.815).toFixed2(2)',(9.815).toFixed2(2));
		console.log('(9.825).toFixed2(2)',(9.825).toFixed2(2));
		console.log('(9.835).toFixed2(2)',(9.835).toFixed2(2));
		console.log('(9.845).toFixed2(2)',(9.845).toFixed2(2));
		console.log('(9.855).toFixed2(2)',(9.855).toFixed2(2));
		console.log('(9.865).toFixed2(2)',(9.865).toFixed2(2));
		console.log('(9.875).toFixed2(2)',(9.875).toFixed2(2));
		console.log('(9.885).toFixed2(2)',(9.885).toFixed2(2));
		console.log('(9.895).toFixed2(2)',(9.895).toFixed2(2));
		console.groupEnd();
		console.log("数值计算测试");
	</script>
</body>
</html>